Skip to main content

pacenotes_installer\wizard\page/
state_access.rs

1use windows_sys::Win32::Foundation::{HWND, LPARAM};
2use windows_sys::Win32::UI::WindowsAndMessaging as wm;
3
4/// The shared state stored in the page's `GWLP_USERDATA` by `adopt_state`.
5pub unsafe fn state<'a>(dialog: HWND) -> Option<&'a mut crate::wizard::state::WizardState> {
6    (wm::GetWindowLongPtrW(dialog, wm::GWLP_USERDATA) as *mut crate::wizard::state::WizardState)
7        .as_mut()
8}
9
10/// Stores the state that `WM_INITDIALOG` delivers inside the page's `PROPSHEETPAGEW`.
11pub unsafe fn adopt_state<'a>(
12    dialog: HWND,
13    lparam: LPARAM,
14) -> Option<&'a mut crate::wizard::state::WizardState> {
15    let page = lparam as *const windows_sys::Win32::UI::Controls::PROPSHEETPAGEW;
16    let pointer = if page.is_null() { 0 } else { (*page).lParam };
17    wm::SetWindowLongPtrW(dialog, wm::GWLP_USERDATA, pointer);
18    (pointer as *mut crate::wizard::state::WizardState).as_mut()
19}